package com.cskaoyan.javase._1extends._7initialization._3super;

/**
 * this和super的使用有很大的相似之处
 * 其中：
 * this指向当前对象
 * super指向子类对象中那片父类的区域，可以近似的看成指向父类对象
 * 所以this、super这两个关键字可以在子类的：
 *      1.构造器
 *      2.构造代码块
 *      3.成员方法
 * 中使用，一个表示自身对象，一个表示父类对象。
 * 使用的语法也是类似的。
 *
 * 如果真要扣出区别，那也还是有的，主要有：
 *      1.最本质的区别。this指向当前对象，this确实指向一个对象，this是一个引用。
 *          但是super不是引用，它指向的不是对象，它指向的是子类对象中那片父类的区域
 *          近似看成一个父类对象
 *
 *          所以this关键字可以直接打印
 *          但super不行，不能直接打印。
 *
 *      2.this指向当前对象，毕竟是自己人，所以this点访问时，不受权限限制。
 *      但是super指向父类对象（近似），毕竟还是跨类了，需要受访问权限的限制。
 *
 * this和super在特殊场景下的使用：
 *      当父子类出现同名成员时，可以用super指向父类对象，this指向当前对象，以示区分。
 *
 *      当父子类出现同名成员时，在子类中直接访问该同名成员时，默认访问子类的（就近原则）
 *      这时想要访问父类同名成员，就需要使用super了。
 *
 *
 *
 * @since 14:20
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class Father {
    int num;

    private int num3;

}

class Son extends Father {
    int num2;
    int num;
    private String name;

    public void test2(int num) {
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }

    public void test() {
        System.out.println(num);
        System.out.println(num2);

        System.out.println(super.num);
        System.out.println(this.num2);

        // System.out.println(super);
        System.out.println(this);
        System.out.println(this.name);
        // System.out.println(super.num3);
    }
}